package msg

import (
	"encoding/json"
	"github.com/beego/beego/v2/core/logs"
)

var (
	gHandler *handleInfo
)

const (
	MSG_TYPE_COMPANY_ADD = iota
	MSG_TYPE_COMPANY_UPDATE
	MSG_TYPE_AGENT_SIGN_IN
	MSG_TYPE_AGENT_SIGN_OFF
	MSG_TYPE_QUEUE_ADD
	MSG_TYPE_QUEUE_UPDATE
	MSG_TYPE_QUEUE_DEL
	MSG_TYPE_SIP_ADD
	MSG_TYPE_SIP_UPDATE
	MSG_TYPE_SIP_DEL
)

type MSG_SYNC_QUE struct {
	Id        int    `json:"id"`        //队列Id
	CompanyId int    `json:"companyId"` //企业Id
	Name      string `json:"name"`      //队列名称--企业内唯一
	Key       string `json:"key"`       //绑定按键/关键字，目前是数字0-9或*、#
	Media     string `json:"media"`     //入队等待音 可选
	QueLen    int    `json:"queLen"`    //队列长度，可选
	WaitTime  int    `json:"waitTime"`  //队列等待时长 可选
	Distrb    string `json:"distrb"`    //队列分发模式 枚举,字符串
}

//企业注册入参
type MSG_SYNC_APP struct {
	Number    string `json:"number"`    //接听号码/外显号码
	CompanyId int    `json:"companyId"` //企业Id
	NavAudio  string `json:"navAudio"`  //导航语音,可选
	GetKey    bool   `json:"gegKey"`    //按键支持,可选，默认支持
	Acd       string `json:"acd"`       //分配模式
}

type MSG_SYNC_SIP_ACCT struct {
	CompanyId string `json:"companyId"` //企业Id
	SipAcct   string `json:"account"`   //账号名称 16位
	Passwd    string `json:"passwd"`    //账号密码 建议6位数字
}

//坐席注册入参
type MSG_SYNC_SIGN struct {
	ServiceId string `json:"serviceId"` //坐席Id
	Number    string `json:"number"`    //接听号码
	QueId     string `json:"skillId"`   //队列名称/队列Id
	CompanyId int    `json:"companyId"` //企业Id
	Display   string `json:"display"`   //外显号码
}

type msgInfo struct {
	Event  int    `json:"event"`
	Sender int    `json:"dsid"`
	Data   string `json:"data"`
}

func SynMsgSend(message string, msgType int) {

	if gHandler == nil {
		return
	}

	newMsg := msgInfo{
		Event:  msgType,
		Sender: gHandler.dsid,
		Data:   message,
	}

	se, _ := json.Marshal(newMsg)
	gHandler.Send(se)
}

func Init(passwd, addr, localIp string, dsid int) {

	gHandler = newHandler(passwd, addr, localIp, dsid)
	if gHandler != nil {
		logs.Info("多服务模式运行")

	} else {
		logs.Info("单机模式运行")
	}
}
